//用闭包形式来写，前面加;是防止跟其他js压缩时报错
;
(function (global) {
    //开启严格模式
    //  "use strict";
    //构造函数定义一个类    传参数
    var lq = {
        ajax: function (param) {
            var xmlhttp;
            //参数初始化
            var defaults = {
                url: '',
                type: 'get',
                data: {},
                async: true,
                dataType: '',
                jsonp:'callback',
                success: function (res) {
                    console.log(res)
                },
                error: function (res) {
                    console.log(res)
                }
            }
            var params = param == undefined ? '' : params; // 没参数把params设置成空字符串
            params = Object.assign({}, defaults, param);
            //jsonp跨域
            if(params.dataType == 'jsonp'){
                var callback = "lq"+(new Date()).valueOf();
                params.url = this.urlAddParam(params)+'&'+params.jsonp+"="+callback;
                var jsonpScript = document.createElement('script');
                jsonpScript.setAttribute('src',params.url);              
                document.getElementsByTagName("head")[0].appendChild(jsonpScript)
                window[callback] =function(res){
                    params.success(res);
                    window[callback] = undefined;
                    try{delete window[callback]}  catch(e){}
                    document.getElementsByTagName("head")[0].removeChild(jsonpScript)
                }

                return
            }
            //创建XMLHttpRequest对象    
            if (window.XMLHttpRequest) {
                xmlhttp = new XMLHttpRequest();
            } else {
                xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
            }
            if (params.type == 'get') { //get请求
                params.url = this.urlAddParam(params);
                xmlhttp.open(params.type, params.url, params.async);
                xmlhttp.send();
            } else if (params.type == 'post') {
                xmlhttp.open(params.type, params.url, params.async)
                xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
                xmlhttp.send(this.objToParams(params.data))

            }+

            xmlhttp.addEventListener('readystatechange', function () {
                if (params.async == true) {
                    xmlhttp.onreadystatechange = function () {
                        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                            if (params.dataType == "json") {
                                params.success(JSON.parse(xmlhttp.responseText))
                            } else {
                                params.success(xmlhttp.responseText)
                            }
                        }
                    }
                } else {
                    params.success(xmlhttp.responseText)
                }
            })


        },
        objToParams: function (obj) { // 把对象变成 key1=val1&key2=val2 
            var paramsStr = ''
            if (typeof obj == 'object') {
                for (var key in obj) {
                    paramsStr += '&' + key + '=' + obj[key]
                }
                return paramsStr.substr(1, paramsStr.length - 1)
            }
        },
        urlAddParam:function(params){
            if (params.url.indexOf('?') != -1) {
                 return   params.url += Object.keys(params.data).length > 0 ? '/' + this.objToParams(params.data) : '';
                } else {
                 return  params.url += Object.keys(params.data).length > 0 ? '?' + this.objToParams(params.data) : '';
                }
        }
    }



    //兼容CommonJs规范 
    if (typeof module !== 'undefined' && module.exports) {
        module.exports = lq;
    };
    //兼容AMD/CMD规范
    if (typeof define === 'function') define(function () {
        return lq;
    });
    //注册全局变量，兼容直接使用script标签引入插件
    global.lq = lq;
})(this);